
#Область ОписаниеПеременных

#КонецОбласти

#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Не Параметры.Свойство("ПараметрыИмпорта") Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	
	//@skip-check unknown-form-parameter-access
	ПараметрыИмпорта = Параметры.ПараметрыИмпорта;//см. УИ_ОбщегоНазначенияКлиентСервер.НовыйПараметрыИмпортаИнструмента
	ПрочитатьФайлВоВременноеХранилище = ПараметрыИмпорта.ПрочитатьФайлВоВременноеХранилище;
	
	Для Каждого ТекФормат Из ПараметрыИмпорта.Форматы Цикл
		НоваяСтрока = ФорматыИмпорта.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекФормат);
	КонецЦикла;
	
	Если ФорматыИмпорта.Количество() = 0 Тогда
		Отказ = Истина;
	КонецЕсли;
	
	ЗаполнитьСписокВыбораФормата();
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	ВыбранныйФормат = ВыбранныйФормат(ЭтотОбъект);
	Если ВыбранныйФормат <> Неопределено Тогда
		ВариантыСодержимого = УИ_ОбщегоНазначенияКлиентСервер.ВариантыСодержимогоДляИмпорта();
		Если ВыбранныйФормат.ВариантСодержимого = ВариантыСодержимого.Строка Тогда
			ПроверяемыеРеквизиты.Добавить("Текст");	
		Иначе
			ПроверяемыеРеквизиты.Добавить("ИмяФайла");
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	ВыбранныйФормат = ВыбранныйФормат(ЭтотОбъект);
	Если ВыбранныйФормат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДВФ.МножественныйВыбор = Ложь;
	ДВФ.Фильтр = ВыбранныйФормат.ФильтрФайловДляДиалога;
	ДВФ.ПолноеИмяФайла = ИмяФайла;

	ДВФ.Показать(Новый ОписаниеОповещения("ИмяФайлаНачалоВыбораЗавершениеВыбора", ЭтотОбъект));
КонецПроцедуры

&НаКлиенте
Процедура ФорматПриИзменении(Элемент)
	УстановитьСтраницуПоФормату();
КонецПроцедуры
#КонецОбласти

#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Загрузить(Команда)
	Если Не ПроверитьЗаполнение() Тогда
		ВозвраТ;
	КонецЕсли;
	
	ВыбранныйФормат = ВыбранныйФормат(ЭтотОбъект);
	Если ВыбранныйФормат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ВариантыСодержимого = УИ_ОбщегоНазначенияКлиентСервер.ВариантыСодержимогоДляИмпорта();
	
	Если ПрочитатьФайлВоВременноеХранилище И ВыбранныйФормат.ВариантСодержимого = ВариантыСодержимого.Файл Тогда
		ТолькоПросмотр = Истина;
		НачатьЧтениеФайлаВоВременноеХранилище(ВыбранныйФормат);
		Возврат;
	КонецЕсли;
	
	Закрыть(РезультатНастроекИмпорта(ВыбранныйФормат, ИмяФайла));
КонецПроцедуры
#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Функция РезультатНастроекИмпорта(ВыбранныйФормат, АдресФайла)
	Результат = УИ_ОбщегоНазначенияКлиентСервер.НовыйРезультатНастроекИмпорта();
	Результат.Формат = ВыбранныйФормат;
	Результат.ОчиститьДанныеИнструментаПередЗаполнением = ОчиститьДанныеИнструментаПередЗаполнением;
	
	ВариантыСодержимого = УИ_ОбщегоНазначенияКлиентСервер.ВариантыСодержимогоДляИмпорта();
	Если ВыбранныйФормат.ВариантСодержимого = ВариантыСодержимого.Строка Тогда
		Результат.Содержимое = Текст;
	Иначе
		Результат.Содержимое = АдресФайла;
	КонецЕсли;
	
	Возврат Результат;
КонецФункции

&НаКлиенте
Процедура НачатьЧтениеФайлаВоВременноеХранилище(ВыбранныйФормат)
	ПараметрыОповещения = Новый Структура;
	ПараметрыОповещения.Вставить("Формат", ВыбранныйФормат);
	
	ПараметрыЧтения = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыЧтенияФайла(ВладелецФормы.УникальныйИдентификатор);
	ПараметрыЧтения.ПолноеИмяФайла = ИмяФайла;
	ПараметрыЧтения.ОповещениеОЗавершении = Новый ОписаниеОповещения("НачатьЧтениеФайлаВоВременноеХранилищеЗавершение",
		ЭтотОбъект, ПараметрыОповещения);

	УИ_ОбщегоНазначенияКлиент.НачатьЧтениеФайла(ПараметрыЧтения);
КонецПроцедуры

// Начать чтение содержимого файла завершение.
// 
// Параметры:
//  Результат - Массив из см. УИ_ОбщегоНазначенияКлиент.НовыйЭлементРезультатаЧтенияФайла
//  ДополнительныеПараметры - Структура:
//  	* Формат - см. УИ_ОбщегоНазначенияКлиентСервер.НовыйФорматИмпортаИнструмента
&НаКлиенте
Процедура НачатьЧтениеФайлаВоВременноеХранилищеЗавершение(Результат, ДополнительныеПараметры) Экспорт
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат.Количество() = 0 Тогда
		ВозвраТ;
	КонецЕсли;
	
	Закрыть(РезультатНастроекИмпорта(ДополнительныеПараметры.Формат, Результат[0].Хранение));
КонецПроцедуры

&НаКлиенте
Процедура ИмяФайлаНачалоВыбораЗавершениеВыбора(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Если ВыбранныеФайлы.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
		
	ИмяФайла = ВыбранныеФайлы[0];
КонецПроцедуры

&НаКлиенте
Процедура УстановитьСтраницуПоФормату()
	Страница = Элементы.ГруппаСтраницаНеВыбранФормат;
	
	ВариантыСодержимого = УИ_ОбщегоНазначенияКлиентСервер.ВариантыСодержимогоДляИмпорта();
	
	ВыбранныйФормат	= ВыбранныйФормат(ЭтотОбъект);
	Если ВыбранныйФормат <> Неопределено Тогда
		Если ВыбранныйФормат.ВариантСодержимого = ВариантыСодержимого.Строка Тогда
			Страница = Элементы.ГруппаСтраницаТекст;
		Иначе
			Страница = Элементы.ГруппаСтраницаВыборФайла;
		КонецЕсли;
	КонецЕсли;
	
	Элементы.ГруппаСтраницы.ТекущаяСтраница = Страница;
КонецПроцедуры


// Выбранный формат.
// 
// Возвращаемое значение:
//  см. УИ_ОбщегоНазначенияКлиентСервер.НовыйФорматИмпортаИнструмента
&НаКлиентеНаСервереБезКонтекста
Функция ВыбранныйФормат(Форма) 
	СтруктураПоиска = Новый Структура;
	СтруктураПоиска.Вставить("Идентификатор", Форма.Формат);
	
	НайденныеСтроки = Форма.ФорматыИмпорта.НайтиСтроки(СтруктураПоиска);
	Если НайденныеСтроки.Количество() = 0 Тогда
		Возврат Неопределено;
	КонецЕсли;

	ФорматИмпорта = УИ_ОбщегоНазначенияКлиентСервер.НовыйФорматИмпортаИнструмента();
	ЗаполнитьЗначенияСвойств(ФорматИмпорта, НайденныеСтроки[0]);
	
	Возврат ФорматИмпорта;	
КонецФункции

&НаСервере
Процедура ЗаполнитьСписокВыбораФормата()
	Элементы.Формат.СписокВыбора.Очистить();
	Для Каждого Стр Из ФорматыИмпорта Цикл
		Элементы.Формат.СписокВыбора.Добавить(Стр.Идентификатор, Стр.Представление);
	КонецЦикла;	
КонецПроцедуры 

#КонецОбласти
